% appendix/rcuimpl/rcu.tex

\QuickQuizChapter{app:rcuimpl:Read-Copy Update Implementations}{Read-Copy Update Implementations}

This appendix describes several fully functional production-quality RCU
implementations.
Understanding of these implementations requires a thorough understanding
of the material in
Chapters~\ref{chp:Introduction} and
\ref{chp:Deferred Processing},
as well as a reasonably good understanding of the Linux kernel,
the latter of which may be found in several textbooks and
websites~\cite{BovetCesati2005,CorbetRubiniKroahHartman,CorbetLWN,RobertLove2005}.

If you are new to RCU implementations, you should start with the
simpler ``toy'' RCU implementations that may be found in
Section~\ref{sec:defer:``Toy'' RCU Implementations}.

Section~\ref{app:rcuimpl:Sleepable RCU Implementation} presents
``Sleepable RCU'', or SRCU, which allows SRCU readers to sleep
arbitrarily.
This is a simple implementation, as production-quality RCU implementations
go, and a good place to start learning about such implementations.

Section~\ref{app:rcuimpl:rcutree:Hierarchical RCU Overview}
gives an overview of a highly scalable implementation of Classic
RCU, designed for SMP systems sporting thousands of CPUs.
Section~\ref{app:rcuimpl:rcutreewt:Hierarchical RCU Code Walkthrough}
takes the reader on a code walkthrough of this same implementation
(as of late 2008).

Finally,
Section~\ref{app:rcuimpl:Preemptible RCU}
provides a detailed view of the preemptible RCU implementation used
in real-time systems.

% RCU requirements and desiderata?  Or at end?
\input{appendix/rcuimpl/srcu.tex}
% \input{appendix/rcuimpl/rcuclassic.tex}  @@@ from Ph.D. dissertation.
\input{appendix/rcuimpl/rcutree.tex}
\input{appendix/rcuimpl/rcutreewt.tex}
\input{appendix/rcuimpl/rcupreempt.tex}
